From 18b6341b936b4bdd790827fb4720e1734c76c704 Mon Sep 17 00:00:00 2001 From: "vhanquez@kneesa.uk.xensource.com" Date: Fri, 17 Mar 2006 10:03:37 +0000 Subject: [PATCH] Reinitialize producer and consumer index to 0 if indexes corruption are detected in XenBus. Prevent a kernel infinite loop and add more recovering ability. Signed-off-by: Vincent Hanquez --- linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_comms.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_comms.c b/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_comms.c index 6d06b4dc1e..dac34e4e0f 100644 --- a/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_comms.c +++ b/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_comms.c @@ -106,8 +106,10 @@ int xb_write(const void *data, unsigned len) cons = intf->req_cons; prod = intf->req_prod; mb(); - if (!check_indexes(cons, prod)) + if (!check_indexes(cons, prod)) { + intf->req_cons = intf->req_prod = 0; return -EIO; + } dst = get_output_chunk(cons, prod, intf->req, &avail); if (avail == 0) @@ -150,8 +152,10 @@ int xb_read(void *data, unsigned len) cons = intf->rsp_cons; prod = intf->rsp_prod; mb(); - if (!check_indexes(cons, prod)) + if (!check_indexes(cons, prod)) { + intf->rsp_cons = intf->rsp_prod = 0; return -EIO; + } src = get_input_chunk(cons, prod, intf->rsp, &avail); if (avail == 0) -- 2.30.2